#include "main.h"
// user
#include "stm32f1xx_it.h"
// #include "flash_divide.h"
// Drivers
#include "cmsis_os2.h"
#include "stm32f103xx_clock.h"
// msp
#include "msp_gpio.h"
#include "msp_uart.h"
// #include "msp_adc.h"
// #include "msp_crc.h"
// #include "msp_rtc.h"
// #include "msp_flash.h"
// #include "sw_spi.h"
// #include "msp_bkpr.h"
//bsp
// #include "bsp_wdg.h"
// #include "bsp_store.h"
// app
#include "app_manager.h"
// 
#include "debug.h"

void MSP_Init(void);

int main(void)
{
    #if 0
    NVIC_SetVectorTable(BOOTLOADER_ADDR_START, \
        (APPLICATION_MAIN_ADDR_START - BOOTLOADER_ADDR_START));     //这句话可以加在IAP APP就不用再单独添加
    __enable_irq();                                                 //! 恢复全局中断
    BSP_WDG_Init();                                                 // 看门狗初始化
    #endif
    MSP_Init();                                                     //系统上电初始化
    App_Init();                                                     //执行应用程序
}

/**
 * @brief 单片机底层初始化
 *
 */
void MSP_Init(void)
{
    HAL_Init();                                                                     // 初始化SMT32-HAL库
    SystemClock_Config();                                                           // 设置时钟树
    _DEBUG_INIT();                                                                  // 初始化debug接口
    _DEBUG_PRINT(DBG_SYS, "msp init start\r\n");                                    // msp初始化开始
    MSP_GPIO_Init();
    // MSP_DMA_Init();
    // MSP_ADC2_Init();
    // MSP_CAN_Init();
    // MSP_USB_PCD_Init();
    // MSP_CRC_Init();
    // MSP_I2C1_Init();
    // MSP_I2C2_Init();
    // MSP_SPI1_Init();
    // MSP_SPI2_Init();
    // MSP_TIM1_Init();
    // MSP_TIM2_Init();
    // MSP_TIM3_Init();
    // MSP_USART2_UART_Init();
    _DEBUG_PRINT(DBG_SYS, "msp init done\r\n");                                     // msp初始化结束
}
